iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0
Mobile Development

30天用React native製作app!!系列 第 20

[蚊子的Day20]全域變數的使用~React Native

  • 分享至 

  • xImage
  •  

我需要狀態變數來記錄使用者作答的情況,而且要在App每個頁面都可使用,這時就要使用useContext了!

全域變數的設定

React提供createContext與useContext函數,可利用他們來建立全域變數分享到全部頁面。
首先,新增一個名為stores的資料夾,然後在裡面建立progressstore.js檔案,並將createContext與usestate匯入。

import React, { createContext, useState} from "react";

接下來,利用createContext建立一個StoreContext,用以儲存狀態變數。

export const StoreContext = createContext();

再來宣告StoreProvider用以傳遞狀態變數,且讓StoreProvider接受一個children元件。在StoreProvider內將需要用到的狀態變數完成宣告,並且宣告一個store物件用來儲存狀態變數。最後將children放在回覆的標籤 StoreContext.Provider之中,並設定參數Value的值為要傳遞給children元件的參數。
*小提醒:要注意store中的陣列宣告方式喔!

import locationData from '../json/location.json';
import contactData from '../json/contact.json';
import meData from '../json/me.json';

export const StoreProvider = ({ children }) => {  
    const [me, setMe] = useState(meData);
    const [locations, setlocations] = useState(locationData.locationList);
    const [contact, setcontact] = useState(contactData.contactList);
    const [isLogin, setIsLogin] = useState(false);
    const [ordernum,setordernum]=useState(0);
    const store ={
        meState: [me, setMe],
        locationsState:[locations, setlocations],
        contactState:[contact, setcontact],
        isLoginState: [isLogin, setIsLogin],
        ordernumState:[ordernum,setordernum]
    };
    return (
        <StoreContext.Provider value={store}>
           {children}
        </StoreContext.Provider>
       );
};

*小提示:me.json的內容為使用者的各項目初始狀態,例如:名字、學號、答題情況、登入與否等。

開啟App.js檔案,利用StoreProvider元件將App元件包起來,即完成將狀態變數設定為全域狀態變數。

//App.js的部分程式碼
import {StoreProvider} from "./src/stores/progressstore";

const App = () => {
    <NavigationContainer>
        <MainTabNavigator />
    </NavigationContainer>
}

export default () => {
  return (
    <StoreProvider>
      <App />
    </StoreProvider>
    )
};

全域變數的使用下篇以更改暱稱來做解釋~


上一篇
[蚊子的Day19]Hook介紹~React Native
下一篇
[蚊子的Day21] 使用useContext更改暱稱~React Native
系列文
30天用React native製作app!!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言